package com.itzhoun;

/**
 * @author 周楠
 * @Date 2023/01/14/下午 2:53
 */
public abstract class ComputerBuilder {

    /**
     * 生成器模式定义：封装一个复杂构造过程，并允许按照步骤构造
     * 定义解释： 我们可以将生成器模式理解为，假设我们有一个对象需要建立，这个对象是由多个组件（Component）组合而成，每个组件的建立都比较复杂，但运用组件来建立所需的对象非常简单，所以我们就可以将构建复杂组件的步骤与运用组件构建对象分离，使用builder模式可以建立。
     *
     *
     * 生成器模式结构中包括四种角色：
     *
     * （1）产品(Product)：具体生产器要构造的复杂对象；
     *
     * （2）抽象生成器(Bulider)：抽象生成器是一个接口，该接口除了为创建一个Product对象的各个组件定义了若干个方法之外，还要定义返回Product对象的方法（定义构造步骤）；
     *
     * （3）具体生产器(ConcreteBuilder)：实现Builder接口的类，具体生成器将实现Builder接口所定义的方法（生产各个组件）；
     *
     * （4）指挥者(Director)：指挥者是一个类，该类需要含有Builder接口声明的变量。
     * 指挥者的职责是负责向用户提供具体生成器，即指挥者将请求具体生成器类来构造用户所需要的Product对象，
     * 如果所请求的具体生成器成功地构造出Product对象，指挥者就可以让该具体生产器返回所构造的Product对象。（按照步骤组装部件，并返回Product）
     */

    /**
     * 举例 一台电脑的组装需要几个步骤： 1、需要一台主机  2、需要一个显示器  3、需要一个键盘  4、鼠标
     * 该类就是一个抽象生成器，提供了各个方法
     */

    protected Computer computer;


    public Computer getComputer() {
        return computer;
    }

    public void buildComputer(){
        computer = new Computer();
        System.out.println("生成了一台电脑");
    }

    //组装一台主机
    public abstract void buildMaster();

    //抽象定义 组装一台显示屏
    public abstract void buildScreen();

    public abstract void buildKeyboard();
    public abstract void buildMouse();
    public abstract void buildAudio();

}
